home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 6
/
FM Towns Free Software Collection 6.iso
/
t_os
/
et
/
src
/
change.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-08
|
9KB
|
357 lines
#include "et.h"
void change(int menu_i)/*et*/
{
int cut, key_i;
if (!test_bit(G_f, f_WW) || !test_bit(G_f, f_RR))
disp_menu(menu_i, P_v[v_VIEW_0], 5, 0);
switch(menu_i) {
case mn_AT:
set_bit(G_f, f_AT);
break;
case mn_WW:
break;
default:
set_bit(G_f, f_PPGG);
copy_buffer(1, STORE, NULL, 0);
break;
}
cut = key_i = 0;
while (1) {
cut = set_pm(&menu_i, cut, &key_i);
if (test_bit(G_f, f_WW) && test_bit(G_f, f_RR))
return;
if (!cut)
break;
draw_edge(P_RES, AFT);
cut = go_bar(&key_i, 4, 0);
draw_edge(P_SET, AFT);
if (!cut)
break;
}
res_bit(G_f, f_PPGG|f_AT);
disp_menu(menu_i, P_v[v_VIEW_0], 6, 0);
}
int set_pm(int *menu_i_p, int cut, int *key_i_p)/*et*/
{
int v_1, v_2, v_3;
int i, j, menu_i, menu_b, v, v_b, p_i, df, step, key, key_n;
static int pq_a[4]; /* ← static !! */
G_pn.wink = pq_a;
menu_i = *menu_i_p;
if (!test_bit(G_f, f_WW|f_AT))
set_v12(&v_1, &v_2);
set_var_pq(menu_i, pq_a);
p_i = pq_a[0]+4;
paint_window(pq_a, H_GRN, P_NEG);
v = G_pm.a[menu_i-mn_AT];
menu_b = menu_i;
v_b = v;
df = 0;
do {
key = inkey(WINK);
if (isdigit(key))
sub_set_pm(&key, &v, pq_a, menu_i);
if (key == _RT || key == _LT)
step = set_step((int)v, key);
switch(key) {
case _ESC:
paint_window(pq_a, H_GRN, P_NEG);
v = G_pm.a[menu_i-mn_AT];
break;
case S_RET:
if (!nb_key(G_mv))
key = _RET;
case _RET:
if (v != v_b)
v_b = v;
else if (cut)
df = 1;
if (!v)
v = 1;
G_pm.a[menu_i-mn_AT] = v;
set_v123(&v_1, &v_2, &v_3, menu_i);
for (i = 2; i; i--) {
draw_pm(menu_i, H_WHT);
paint_window(pq_a, H_GRN, P_NEG);
exchange_page();
}
if (test_bit(G_f, f_WW) && test_bit(G_f, f_RR)) {
key_n = nb_key(G_mv);
G_mv[key_n].r = G_pm.i.r;
i = (key_n) ? 7 : 0;
*key_i_p = 0;
} else {
switch(key) {
case _RET:
if (!df) {
i = 0;
*key_i_p = 0;
} else
i = 2;
break;
case S_RET:
if (!df) {
i = 3;
*key_i_p = 0;
} else
i = 4;
break;
}
}
if (i == 3 || i == 4)
draw_edge(P_RES, AFT);
cut = go_bar(key_i_p, i, 0);
df = 0;
if (test_bit(G_f, f_WW) && test_bit(G_f, f_RR)) {
if (!i)
draw_edge(P_SET, AFT);
copy_window(P_i[i_WIN_FRAME], P_v[v_VRAM], 0x14, PEEK);
exchange_page();
copy_window(P_i[i_WIN_FRAME], P_v[v_VRAM], 0x14, POKE);
exchange_page();
} else
draw_edge(P_SET, AFT);
paint_window(pq_a, H_GRN, P_NEG);
if (set_pm2(pq_a, &menu_b, &v_b, &v, menu_i))
continue;
break;
case _RT:
i = v + step;
if (i <= 30000)
v = i;
break;
case _LT:
i = v - step;
if (i > 0)
v = i;
break;
case S_BS:
copy_buffer(1, RESTORE, NULL, 0);
for (i = 2; i; i--, exchange_page()) {
if (i == 1) {
copy_window(P_i[i_WIN_VRAM], P_v[v_VRAM], 0x14, POKE);
continue;
}
cls_view(P_i[i_WIN_VIEW]);
copy_window(P_i[i_WIN_VIEW], P_v[v_VIEW_0], 0x120, POKE);
set_trace_mode(test_bit(G_f, f_AA|f_NN));
cul_draw_edge(i);
draw_pm(menu_i, H_WHT);
copy_window(P_i[i_WIN_VRAM], P_v[v_VRAM], 0x14, PEEK);
}
df = 0;
cut = 0;
v = G_pm.a[menu_i-mn_AT];
break;
default:
if (test_bit(G_f, f_WW|f_AT))
continue;
switch(key) {
case _UP:
if (menu_i > mn_PP)
menu_i--;
break;
case _DN:
if (menu_i < mn_GG)
menu_i++;
break;
default:
j = (find_key(key))->n;
if (j < mn_PP || j > mn_GG)
continue;
menu_i = j;
break;
}
if (set_pm2(pq_a, &menu_b, &v_b, &v, menu_i))
continue;
break;
}
for (i = 2; i; i--, exchange_page()) {
draw_v((int)v, p_i, G_mn[menu_i].q, H_WHT, 5);
paint_window(pq_a, H_GRN, P_NEG);
}
paint_window(pq_a, H_GRN, P_NEG);
} while (key != _ESC);
paint_window(pq_a, H_GRN, P_NEG);
*menu_i_p = menu_i;
return(cut);
}
int set_pm2(int *pq_p, int *menu_b_p, int *v_b_p, int *v_p, int menu_i)/*et*/
{
int i, j, v, v_b, menu_b, p_i;
if (menu_i > mn_GG)
return;
menu_b = *menu_b_p;
v_b = *v_b_p;
v = *v_p;
switch(menu_i) {
case mn_PP:
case mn_DD:
case mn_XX:
case mn_YY:
case mn_ZZ:
case mn_GG:
j = menu_i == menu_b;
if (!j) {
G_nb.mn = menu_i;
v = G_pm.a[menu_i-mn_AT];
set_var_pq(menu_i, pq_p);
p_i = pq_p[0]+4;
for (i = 2; i; i--, exchange_page()) {
if (i == 1) {
copy_window(P_i[i_WIN_VRAM], P_v[v_VRAM], 0x14, POKE);
continue;
}
draw_v((int)v_b, p_i, G_mn[menu_b].q, H_WHT, 5);
draw_v((int)v, p_i, G_mn[menu_i].q, H_WHT, 5);
mark_key(2, menu_b);
draw_mode(1, menu_b, H_RED);
draw_mode(0, menu_b, L_WHT);
draw_mode(0, menu_i, L_WHT);
draw_mode(1, menu_i, H_RED);
paint_window(pq_p, H_GRN, P_NEG);
copy_window(P_i[i_WIN_VRAM], P_v[v_VRAM], 0x14, PEEK);
}
paint_window(pq_p, H_GRN, P_NEG);
menu_b = menu_i;
v_b = v;
j = 1;
}
break;
default:
j = 1;
break;
}
*menu_b_p = menu_b;
*v_b_p = v_b;
*v_p = v;
return(j);
}
int inp_v(int *v_p, int key, int n)/*et*/
{
int i, k, h, col;
int pq_a[4], p_i;
int v, v_i;
if (test_bit(G_f, f_AT)) {
n = mn_AT;
h = 4;
col = H_WHT;
} else if (test_bit(G_f, f_WW)) {
n = mn_WW;
h = 4;
col = H_WHT;
} else {
n = G_nb.mn;
if (test_bit(G_f, f_FF)) {
v_i = 0;
h = 3;
col = H_GRN;
} else {
h = 4;
col = H_WHT;
}
}
set_var_pq(n, pq_a);
p_i = pq_a[0]+4;
pq_a[0] = p_i + 8;
pq_a[2] = pq_a[0]+7;
access_page();
paint_window(pq_a, col, P_NEG);
access_page();
i = v = 0;
do {
if (!test_bit(G_f, f_FF) && isdigit(key)) {
v = v * 10 + key-_00;
for (k = 2; k; k--, exchange_page())
draw_v((int)key-_00, p_i, G_mn[n].q, H_GRN, 1);
p_i += 8;
} else if (isdigit(key) || (key >= _AA && key <= _FF)) {
if (isdigit(key))
v = v * 16 + key-_00;
else
v = v * 16 + key-_AA+10;
for (k = 2; k; k--, exchange_page())
if (isdigit(key))
draw_v((int)key-_00, p_i, G_mn[n].q, H_GRN, 1);
else
draw_v((int)key-_AA+10, p_i, G_mn[n].q, H_GRN, 1);
p_i += 8;
v_i++;
if (v_i >= 4)
key = _RET;
}
if (key != _RET)
key = inkey(WINK);
if (key == _BS) {
key = 0;
if (v_i)
v_i--;
if (!v)
continue;
i--;
v /= ((h == 4) ? 10L : 16L);
access_page();
paint_window(pq_a, col, P_NEG);
access_page();
p_i -= 8;
pq_a[0] = p_i;
pq_a[2] = pq_a[0]+7;
for (k = 2; k; k--, exchange_page())
paint_window(pq_a, col, P_RES);
access_page();
paint_window(pq_a, col, P_NEG);
access_page();
} else if (isdigit(key) || (key >= _AA && key <= _FF)) {
if (i == h) {
key = 0;
continue;
}
access_page();
paint_window(pq_a, col, P_NEG);
if (i <= h-1) {
pq_a[0] = p_i+8;
pq_a[2] = pq_a[0]+7;
i++;
paint_window(pq_a, col, P_NEG);
}
access_page();
}
} while (!key || isdigit(key) || (key >= _AA && key <= _FF));
if (test_bit(G_f, f_FF)) {
if (v < 0x2122)
v = 0x2122;
else if (v > 0x737e)
v = 0x737e;
} else if (v > 30000)
v = 30000;
*v_p = (int)v;
return(key);
}
void sub_set_pm(int *key_p, int *v_p, int pq_a[], int menu_i)/*et*/
{
int i, p_i;
p_i = pq_a[0]+4;
for (i = 2; i; i--, exchange_page())
paint_window(pq_a, H_WHT, P_RES);
*key_p = inp_v(v_p, *key_p, menu_i);
if (*key_p != _RET && *key_p != S_RET && *key_p != C_MM) {
*v_p = G_pm.a[menu_i-mn_AT];
for (i = 2; i; i--, exchange_page()) {
paint_window(pq_a, H_WHT, P_RES);
draw_v((int)*v_p, p_i, G_mn[menu_i].q, H_WHT, 5);
paint_window(pq_a, H_GRN, P_NEG);
}
paint_window(pq_a, H_GRN, P_NEG);
}
}
void set_v12(int *v1_p, int *v2_p)/*et*/
{
*v1_p = G_pm.i.dist * GETA_ET / G_pm.i.pers;
*v2_p = G_pm.i.z_step * GETA_ET / G_pm.i.dist;
}